// 导入auth.js中封装好的方法
import { getToken, setToken, removeToken ,setTime,removeTime} from "@/utils/auth.js";
// 导入封装好的登录请求接口
import { loginApi,getInfoApi,getBaseApi } from "@/api/user.js";


// 导入重置路由的方法
import {resetRouter} from '@/router'


// 封装用户的信息
export default {
  // 开启命名空间
  namespaced:true,
  // 存储token数据
  state: {
    token:getToken() || '',
    // 定义一个空对象保存用户信息
    userInfo:{}
  },
  // 调用方法保存token
  mutations: {
    // 设置保存token
    setToken(state, token) {
      // 保存token到vuex中
      state.token = token;
      // 保存到浏览器中
      setToken(token);
      // 保存token时也保存token获取的时间
      setTime()
    },
    // 删除token
    removeToken(state) {
      // 删除vuex中token
      state.token = "";
      // 删除浏览器中token
      removeToken();
       // 删除保存的时间戳
       removeTime()
    },

    // 设置保存用户信息
    setUserInfo(state,Info){
      state.userInfo=Info
    },
    // 设置删除用户信息
    removeUserInfo(state){
      state.userInfo={}
    }
  },
  // 发送请求
  actions: {
    // 发送请求到服务器，获取 token
    async login({ commit }, form) {
      // 发送请求到服务器
      const res = await loginApi(form)
      // console.log(res);
      // 接收返回的 token
      const token = res.data.data
      // 将 token 保存起来
      commit('setToken', token)
    },

    // 发送获取用户信息请求
    async getUserInfo({commit}){
      // 发送用户基本信息请求
      let res=await getInfoApi()
      // 发送用户头像基本请求，需要id就把用户基本信息请求的id给它
      let baseRes=await getBaseApi(res.data.data.userId)
      // 把他们那个请求得到的内容展开合并成一个新的对象
      const userObj={...res.data.data,...baseRes.data.data}
      // 交个setUserInfo保存起来
      commit('setUserInfo',userObj)
      // 这段代码现在没有任何作用，为后面埋下伏笔
      return userObj
    },
    // 定义一个退出的方法
    LogOut({commit}){
      // 调用上面的删除token方法
      commit('removeToken')
      // 调用上面删除用户信息的方法
      commit('removeUserInfo')
      // 使用路由重置的方法
      resetRouter()
    }
  },
  getters: {},
};
